package com.ruoyi.system.mapper;

import java.time.LocalDate;
import java.util.List;

import com.ruoyi.system.domain.HysYuyue;
import com.ruoyi.system.domain.OutPutExcel;
import com.ruoyi.system.domain.YuYueCount;



/**
 * zzMapper接口
 *
 * @author ruoyi
 * @date 2025-09-25
 */
public interface HysYuyueMapper {
    /**
     * 查询zz
     *
     * @param id zz主键
     * @return zz
     */
    public HysYuyue selectHysYuyueById(Long id);

    /**
     * 查询zz列表
     *
     * @param hysYuyue zz
     * @return zz集合
     */
    public List<HysYuyue> selectHysYuyueList(HysYuyue hysYuyue);

    /**
     * 新增zz
     *
     * @param hysYuyue zz
     * @return 结果
     */
    public int insertHysYuyue(HysYuyue hysYuyue);

    /**
     * 修改zz
     *
     * @param hysYuyue zz
     * @return 结果
     */
    public int updateHysYuyue(HysYuyue hysYuyue);

    /**
     * 删除zz
     *
     * @param id zz主键
     * @return 结果
     */
    public int deleteHysYuyueById(Long id);

    /**
     * 批量删除zz
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHysYuyueByIds(Long[] ids);


    /**
     * 统计每个科室的预约次数
     *
     * @return 每个科室的预约次数集合
     */
     public List<YuYueCount> countYuyueByDepartment();



     /**
      * 统计每个科室的预约的审批中次数
      *
      * @return 每个科室的预约的审批中次数集合
      */
      public List<YuYueCount> countYuyueByDepartmentAndState1();


      /**
       * 统计每个科室的预约的通过次数
       *
       * @return 每个科室的预约的通过次数集合
       */
       public List<YuYueCount> countYuyueByDepartmentAndState2();


       /**
        * 统计每个科室的预约的拒绝次数
        *
        * @return 每个科室的预约的拒绝次数集合
        */
        public List<YuYueCount> countYuyueByDepartmentAndState3();


    /**
     * 统计每个取消的预约的拒绝次数，取消的状态码为4
     * @return 每个科室的取消预约的拒绝次数集合
     */
     public List<YuYueCount> countQuxiaoState4();



    /**
     * 根据给定的status的状态值，统计每个科室各个状态值的次数
     *
     */
    public List<YuYueCount> countYuyueByDepartmentAndState4(String[] status);


    /**
     * 根据传过来的startDate和endDate，统计这个区间内的会议日期
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 这个区间内的会议日期集合
     */
     public List<LocalDate> tongjiriqi(LocalDate startDate, LocalDate endDate);


    /**
     * 查询所有的待审批的预约
     *
     * @return 所有的待审批的预约集合
     */
     public List<HysYuyue> selectAllPendingAudit();



    /**
      * 根据前端传过来的id,status值，管理员用来审批待审批预约
      * @param hysYuyue 待审批预约实体类
      * @return 操作结果
      */
      public int audit(HysYuyue hysYuyue);


    /**
     * 导出数据表格，里面的字段有：会议室id、会议标题、参数人员范围、召集人、预约人、科室、会议日期、开始时间	结束时间.会议保障.状态.拒绝原因
     * @param hysYuyue 预约实体类
     * @return 所有的预约集合
     */
     public List<OutPutExcel> export(HysYuyue hysYuyue);
}
